#1、勾子函数
    #把外函数的运行结果传递到内函数中运行
    #外函数就是内函数的勾子
# def out_fun(year):
#     def inner_fun(month):
#         print(f'{year}年{month}月')
#     return inner_fun    #把内部函数当作外部函数的返回值
#
# t = out_fun('2025')     #把2025传递给year，函数out_fun的运行结果(运行结果是inner_fun)赋值给t
#                         #函数out_fun运行结束后，它的参数year也不会释放，内函数inner_fun可以继续使用
# t('2')                  #t就是inner_fun
#9(4,5,6,7)--11(5,6)

#2、装饰器
    #装饰器是添加在函数上面，可以让函数使用装饰器的功能，但是函数又不用写装饰器的代码（外挂）
# def f1(fun):
#     def f2():
#         print('前置脚本')
#         fun()
#         print('后置脚本')
#     return f2
#
# @f1
# def csyl():          #函数f1是函数csyl的装饰器，csyl具备f1的功能，但是它不需要写f1的代码
#     print('执行测试用例')
# csyl()

#3、classmethod 装饰器
    #可以装饰在方法上，让这个方法可以不用实例化直接调用
class C():
    @classmethod
    def f1(self):
        print('我是f1')
    @classmethod
    def f2(self):
        print('我是f2')
#类中方法必须先实例化，然后利用对象去调用方法
c1=C()
c1.f1()
c1.f2()
#直接调用类方法会报错，加上classmethod装饰器，它就可以直接调用
C.f1()
C.f2()
